package com.zb.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zb.entity.QtyVo;
import com.zb.entity.ZjWorkLeaveMessage;
import com.zb.result.PageUtil;
import com.zb.vo.OrderLeaveMessage;

import java.util.Collection;
import java.util.List;

/**
 * <p>
 * 工单留言表 服务类
 * </p>
 *
 * @author WEN
 * @since 2023-10-24
 */
public interface ZjWorkLeaveMessageService extends IService<ZjWorkLeaveMessage> {

    /**
     * 保存留言
     * @param messageList
     */
    void save(List<OrderLeaveMessage> messageList);

    /**
     * 根据工单ID获取客服未读的工单留言
     * @param workId 工单ID
     * @return
     */
    long getWorkNotReadLeaveMessageCount(Long workId);

    /**
     * 根据工单ID获取客服工单留言
     * @param workId   工单ID
     * @param pageUtil
     */
    List<ZjWorkLeaveMessage> getWorkLeaveMessageList(Long workId, PageUtil pageUtil);

    /**
     * 根据工单ID获取客服工单留言总记录数
     * @param workId 工单ID
     * @return
     */
    long getWorkLeaveMessageListCount(Long workId);

    /**
     * 根据工单ID获取服务商负责人的工单留言
     * @param empId   操作人ID
     * @param workId   工单ID
     * @param pageUtil 分页对象
     * @return
     */
    List<ZjWorkLeaveMessage> getNetworkWorkLeaveMessageList(Long empId, Long workId, PageUtil pageUtil);

    /**
     * 根据工单ID获取服务商负责人的工单留言总记录数
     * @param empId   操作人ID
     * @param workId 工单ID
     * @return
     */
    long getNetworkWorkLeaveMessageListCount(Long empId, Long workId);

    /**
     * 根据工单ID获取服务商工程师的工单留言
     * @param workId   工单ID
     * @param pageUtil 分页对象
     * @return
     */
    List<ZjWorkLeaveMessage> getEngineerWorkLeaveMessageList(Long empId, Long workId, PageUtil pageUtil);

    /**
     * 根据工单ID获取服务商工程师的工单留言总记录数
     * @param workId   工单ID
     * @return
     */
    long getEngineerWorkLeaveMessageListCount(Long empId, Long workId);

    /**
     * 根据工单ID更新工单客服未读留言
     * @param workId 工单ID
     */
    void updateWorkEmpNotReadLeaveMessageByWorkId(Long workId);

    /**
     * 根据工单ID更新服务商未读留言
     * @param workId 工单ID
     */
    void updateNetworkNotReadLeaveMessageByWorkId(Long workId, boolean engineer);

    /**
     * 根据工单ID更新工程师未读留言
     * @param workId 工单ID
     */
    void updateEngineerNotReadLeaveMessageByWorkId(Long workId);

    /**
     * 根据工单ID更新工单客户未读留言
     * @param workId 工单ID
     */
    void updateUserNotReadLeaveMessageByWorkId(Long workId);


    /**
     * 根据工单ID获取服务商负责人或工程师最新的一条留言
     * @param manager 是否为服务商负责人或超管：false-不是，true-是
     * @param workIds 工单ID
     * @return
     */
    List<ZjWorkLeaveMessage> getNetworkLastOneMesageByWorkIds(boolean manager, List<Long> workIds);

    /**
     * 根据工单ID获取服务商负责人或工程师未读的留言
     * @param manager 是否为服务商负责人或超管：false-不是，true-是
     * @param workIds 工单ID
     * @return
     */
    List<QtyVo> getNetworkNotReadQtyList(boolean manager, List<Long> workIds);

    /**
     * 获取服务商未读留言数量
     * @param custAccId 商家ID
     * @param networkId 服务商ID
     * @return
     */
    long getNetworkUnreadMessageQty(Long custAccId, Long networkId);

    /**
     * 获取工程师未读留言数量
     * @param custAccId 商家ID
     * @param networkId 服务商ID
     * @param networkEmpId 工程师ID
     * @return
     */
    long getNetworkEmpUnReadMessageQty(Long custAccId, Long networkId, Long networkEmpId);

    /**
     * 根据工单ID获取工单最新留言
     * @param workIds 工单ID
     * @return
     */
    List<ZjWorkLeaveMessage> getLastByWorkIds(List<Long> workIds);

    /**
     * 根据工单ID获取留言信息
     * @param workIds 工单ID
     * @return
     */
    List<ZjWorkLeaveMessage> getByWorkIds(List<Long> workIds);
}
